package com.wonderful.compose.channel

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 * Describe:
 *
 * @author Wonderful
 * @time 2025/9/9 16:06
 */
class ChannelTest {
    // Channel 的基本使用步骤
    // 1. 创建 Channel：
    // Kotlin 协程提供 4 种 Channel 类型，适配不同需求：
    // Rendezvous/无缓冲：默认值Channel()
    // Buffered/缓冲：Channel(capacity))
    // Conflated/合并：Channel(Channel.CONFLATED)
    // Unlimited/无限制：Channel(Channel.UNLIMITED)
    // 根据需求选择 Channel 类型，如创建一个带缓冲的 Channel：
    val channel = Channel<Int>(capacity = 10)

    // 2. 发送数据（生产端）：在协程中通过 send 方法发送数据：
    fun produceData() = CoroutineScope(Dispatchers.Default).launch {
        for (i in 1..10) {
            channel.send(i) // 向 Channel 发送 1 到 10 的整数
        }
        channel.close() // 数据发送完毕，关闭 Channel
    }

    // 3. 接收数据（消费端）：同样在协程中通过 receive 或 consumeEach 等方式接收数据：
    fun receiveData() = CoroutineScope(Dispatchers.Default).launch {
        channel.consumeEach { data ->
            println("receive $data")
        }
    }

}

fun main(): Unit = runBlocking {
    val channel = Channel<Int>(capacity = 10)
    for (i in 1..10) {
        channel.send(i)
    }
    channel.close()
    channel.consumeEach { data ->
        println("receive $data")
    }
}